package com.leetcode.leetcode.anyan;

public class _151翻转字符串里的单词 {
    /**
     * 给你一个字符串 s ，逐个翻转字符串中的所有 单词 。
     *
     * 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。
     *
     * 请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。
     *
     * 说明：
     *
     * 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
     * 翻转后单词间应当仅用一个空格分隔。
     * 翻转后的字符串中不应包含额外的空格。
     *  
     *
     * 示例 1：
     *
     * 输入：s = "the sky is blue"
     * 输出："blue is sky the"
     * 示例 2：
     *
     * 输入：s = "  hello world  "
     * 输出："world hello"
     * 解释：输入字符串可以在前面或者后面包含多余的空格，但是翻转后的字符不能包括。
     * 示例 3：
     *
     * 输入：s = "a good   example"
     * 输出："example good a"
     * 解释：如果两个单词间有多余的空格，将翻转后单词间的空格减少到只含一个。
     * 示例 4：
     *
     * 输入：s = "  Bob    Loves  Alice   "
     * 输出："Alice Loves Bob"
     * 示例 5：
     *
     * 输入：s = "Alice does not even like bob"
     * 输出："bob like even not does Alice"
     *  
     *
     * 提示：
     *
     * 1 <= s.length <= 104
     * s 包含英文大小写字母、数字和空格 ' '
     * s 中 至少存在一个 单词
     *  
     *
     * 进阶：
     *
     * 请尝试使用 O(1) 额外空间复杂度的原地解法。
     *
     * 来源：力扣（LeetCode）
     * 链接：https://leetcode-cn.com/problems/reverse-words-in-a-string
     * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
     */
    static class Solution {
        /**
         * 考点：双指针
         * 将字符串用空格分割为一个字符串数组，
         * 双指针分别从数组的两端向中间移动，
         * 每移动一次替换左右指针的元素
         */
        public static String reverseWords(String s) {
            String[] arr = s.split(" ");
            int left = 0;
            int right = arr.length - 1;
            while (left < right) {
                String temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
                left++;
                right--;
            }
            s = "";
            for (int i = 0; i < arr.length; i++) {
                if (!arr[i].trim().equals("")) {
                    s = s + arr[i].trim()+ " ";//去掉首尾空格然后在用空格拼接
                }
            }
            return s.trim();//返回去除首尾空格的字符串
        }

        public static void main(String[] args) {
            String str = "  Bob    Loves  Alice   ";
            System.out.println(reverseWords(str));
        }
    }

}
